#pragma once
#include <iostream>
#include <string>
using namespace std;
/*
	类的static成员和类的对象没有直接关系，类的静态成员是放到静态内存区的，程序开始执行就存在，一直到程序结束才清理。
	类的静态成员变量不论类的实例有多少，但成员变量只有一份。
*/
class Person
{
	//没有权限限定符，默认是private(结构体默认是public)
private:
	//单利模式,私有化构造函数
	Person();
	//单利模式,私有化拷贝构造函数(防止通过拷贝创建多个对象)
	Person(Person &p);
	//单利模式,声明静态成员,必须定义,并赋值(在.cpp文件中有实现)
	static Person *p;
	int age;
	string name;
	//const成员需要赋初值
	const string gender = "男";

public:
	//虚析构函数(作为基类使用,使用多态时,可以通过父类指针来析构子类对象释放内存)
	virtual ~Person();
	//静态函数,可通过类名直接调用()
	static Person * get_Instance();
	//销毁对象,释放内存
	static void release();
	//内联函数不作为函数调用,而是直接的代码替换(没有压栈出栈开销)
	inline void print()
	{
		cout <<"内联函数"<<endl;
	}
	void set_age(int age);
	int get_age();
	void set_name(string name);
	string get_name();
	string get_gender();
};

